-- 2022-8-15

--[[ 17.1.1 模块重命名

    通常 我们通过模块本来的名称来使用它们 但有时 我们也需要将一个模块改名以避免冲突
    一种典型的情况就是 出于测试的目的而需要加载同一模块的不同版本
    对于一个Lua语言模块来说 其内部的名称并不要求是固定的 一次通常修改.lua文件的文件名就够了
    不过 我们却无法修改C标准库的二进制目标代码中luaopen_*函数的名称
    为了进行这种重命名 函数require就会用连字符之间的内容来创建luaopen_*函数的名称
    例如 如果一个模块的名称为mod-v3.4 那么函数require会认为该模块的加载函数应该是luaopen_mod而不是luaopen_mod-v3.4(这也不是有效的C语言函数名)
    因此 如果需要使用两个名称均为mod的模块(或相同模块的两个不同版本) 那么可以对其中的一个进行重命名 如mod-v1
    当调用m1=require "mod-v1"时 函数require会找到改名后的文件mod-v1并将其中原名为luaopen_mod的函数作为加载函数
]]